数据治理系列:一个数据质量监控系统的自我修养
目录
背景
数据治理
数据质量管理
数据质量监控系统设计实现
总体介绍
功能
设计实现
系统框架图
程序执行流程图
表结构设计
监控规则指标详解
表结构变更动态感知
总结
背景
随着大数据时代的到来,伴随着是“海纳百川、有容乃大”种类繁多的海量数据爆炸式增长;有“天下武功,为快不破”惊人的数据处理速度;可挖掘“运筹帷幄胜千里之外”支持决策的数据价值。同时,信息社会不断向纵深发展,数据和信息作为战略性资源的价值正在快速提升。当前,数据的战略价值已得到广泛重视,数据治理能力也成为了衡量一个企业、行业、乃至一个地区的经济社会发展水平的重要指标。
2001年,管理大师汤姆·彼得斯:
一个组织如果没有认识到管理数据和信息如同管理有形资产一样极其重要,那么它在新经济时代将无法生存。
2017年,《经济学人》5月封面文章指出:
数据是未来的石油。
一种新的大宗商品正在一个利润丰厚、增长迅猛的行业中酝酿,反垄断监管者也开始着手限制那些有能力控制这种商品的人。如果是在一个世纪前,这种商品就是石油。而现在,引发巨头们争相抢夺的变成了数据,也就是数字时代的石油。
2019年G20峰会,安倍内阁总理大臣在世界经济论坛年会上的演讲指出:
希望今年的G20峰会成为全球数据治理的起点,为大家长久记忆。聚焦数据治理的峰会,我们不妨先将其命名为大阪轨道,在世界贸易组织(WTO)就此开始进行讨论。
数据治理
数据治理定义很多版本,这里给出了DAMA国际数据管理协会对数据治理定义。
数据治理是对数据资产的管理活动行使权力和控制的活动集合(规划、监控和执行) ——DAMA 国际数据管理协会
数据治理是一个大而全的治理体系。需要数据质量管理、元数据管理、主数据管理、模型管理管理、数据价值管理、数据共享管理和数据安全管理等等模块是一个活的有机体,绝不是一蹴而就的,需要全局考虑。
数据治理的理论体系,这里不是本篇文章的重点,也不做过多介绍。总之,数据治理非常重要,重要到什么程度,此处省略10000字,因为本篇文章重点讲数据数据质量管理系统实现。
数据质量管理
早在 1957 年的时候,计算机刚刚发明的时候,大家就意识到数据对于计算机决策的影响,提出 Garbage In Garbage Out5的警示。2001 年,美国公布《数据质量法案(Data Quality Act)》,提出提升数据质量的指导意见。2018 年,中国银行保险监督管理委员会发布《银行业金融机构数据治理指引》,强调高质量的数据在发挥数据价值中的重要性。
数据质量是保证数据应用效果的基础。数据质量是描述数据价值含量的指标,如同矿石的含金量,数据质量的好坏决定着数据价值的高低。
制定数据标准,从定义表命名规范,字段命名规范,数据类型,备注Comment术语描述规范,指标命名规范,指标口径定义等方面制定规范。
事前数据开发人员的提高保证数据质量意识,在ETL或ELT数据采集、转换、加载过程中,需要数据进行清洗,保证数据高质量产出。事中通过建立一套切实可行的数据质量监控体系,设计数据质量稽核规则,加强从数据源头控制数据质量,形成覆盖数据全生命周期的数据质量管理。事后出现数据质量问题,清晰定位数据技术责任人,进行整改迭代,保证数据质量管理形成一个良性循环,实现数据向优质资产的转变。
数据质量监控系统设计实现
总体介绍
此数据质量监控系统是基于Spark计算引擎,通过界面配置对Hive数据仓库各层表,离线批数据质量监控系统(流式数据质量监模块近期实现后再做分享)。用户可通过前端界面选择哪个数据源(哪个集群),数据库、表或表中字段、配置监控规则,存放到Mysql库(下文有表结构设计),程序通过规则大类,监控规则等元数据信息,动态生成SQL片段集合,在进行优化组合,尽量减少对表读取次数,将执行结果存放监控结果表。调度根据当前任务执行结果判断是否熔断告警。再根据执行结果形成数据质量报告。
功能
丰富可扩展数据质量监控规则库
自定义数据质量监控规则及语法检查
任务熔断、电话、短信、邮件多级告警
清晰定位质量问题业务和技术数据Owner
数据质量问题汇总与明细展示
监控对象表结构变更动态感知
数据质量问题订阅
设计实现
系统框架图
数据质量监控执行流程图
表结构设计
1、监控任务与监控对象表的对应关系表
说明:
source_id:制定对哪个集群数据进行质量监控
databaseName:指定数据库名称
table_name:指定表名称
owner:数据owner,表创建人,是从HiveMeta元数据中取得
2、监控规则配置表
说明:
task_id:即上一张表id,调度时使用
databaseName:指定数据库名称
table_name: 指定表名称
part_flag: 是否为分区表标志
part_format: 分区格式
task_desc: 用户对此条监控规则的描述
rule_name: 监控规则大分类,如有效性、唯一性、准确性等等
term:具体的监控指标名称
field_name: 监控字段,如果是表级别,则填写“表级规则”或自定义SQL规则
warn_grad:告警级别 1:熔断电话告警;2:电话告警;3:邮件告警等等
rule_logic_monitor:监控规则,需要配置逻辑信息,是个json字符串,程序执行对对json的key进行解析
data_owner: 数据owner
is_usable: 此条监控规则是否可用,前端配置人员可停启规则
3、监控规则库表
说明:
rule_name: 监控规则大分类,如有效性、唯一性、准确性等等
rule_desc: 规则大类的说明
term:具体的监控指标名称
term_desc: 规则说明
logic_remark: 监控规则的详细说明
term_level: 规则级别,字段级别、表级别或自定义SQL规则
is_useDefine: 是否为自定义规则
datatype_scope: 此条监控规则的是否范围,比如:同环比波动监测,只能数值型字段
stats: 状态,是否可用
4、监控规则元数据表
说明:
rule_name: 监控规则大分类,如有效性、唯一性、准确性等等
term:具体的监控指标名称
param_name: 参数名称,为rule_logic_monitor监控规则,需要配置逻辑信息,是个json字符串,程序执行对对json的key进行解析
param_desc: 界面展示
value_type: 界面输入框还是下拉框等说明
constrints: 界面输入框输入内容限制,正则表达式
param_weight: 界面参数展示顺序
5、监控结果表
说明:
task_id:任务id
uuid: 调用的批次
databaseName:指定数据库名称
table_name: 指定表名称
rule_name: 监控规则大分类,如有效性、唯一性、准确性等等
term:具体的监控指标名称
field_name: 监控字段,如果是表级别,则填写“表级规则”或自定义SQL规则
term_value:监控结果值
result_code:结果返回码,配合告警级别一起使用warn_grad:告警级别 1:熔断电话告警;2:电话告警;3:邮件告警等等
data_owner: 数据owner
stats_date: 统计日期
6、监测结果码表
说明:
对监控结果表的term_value结果值说明
规则指标
数据质量监控指标从有效性、唯一性、完整性、准确性、一致性、有效性、时效性和自定义监控规则八大类,约20条监控规则指标。以下对各个监控指标做出解释。
有效性
字段长度有效
对字段内容长度是否在有效性范围的监控指标,可配置[最小长度,最 大长度]。如mobile手机号11位;身份证18位或15位是否满足配置监控长度,不等于配置长度范围,视为脏数据。
字段内容有效
对字段内容是否在满足正则表达式指定内容格式的监控指标。如对name姓名含有中英文结合;身份证号含有中文;手机号11111111111等异常数据监控。
字段数值范围有效
对数值类型字段是否在有效性值范围的监控指标,可根据业务场景配置该字段值范围[最小值,最大值]。如age年龄,超过1000岁等。
枚举值个数有效
对枚举值字段的可枚举值种类个数的监控指标,可配置[>、>=、=、<=、<、!=]与期望值的比较。如银行储值卡在“消费、转账、提现”三种业务类型,枚举值个数某天少了一种或多种业务类型,可能是上游业务系统出现问题,或数据采集时丢失数据。
枚举值集合有效
对枚举值字段的可枚举值种类内容集合的监控指标,可配置“包含、相等、不包含”与期望值集合的比较。如银行储值卡在“消费、转账、提现”三种业务类型,出现了“消费、转账、贷款”三种业务类型,虽然枚举值个数也是3种,但是枚举值内容有误。
唯一性
是否重复
对主键是否存在重复数据的监控指标。出现重复数据导致重复计算等问题,也支持联合主键唯一性监控。
完整性
字段是否为空或NULL
对字段内容是否存NULL的监控指标。
记录数是否丢失
表级别质量监控指标,判断是否记录是否丢失或无数据,可配置[>、>=、=、<=、<、!=]与期望值的比较。
记录数环比波动
表级别质量监控指标,判断记录数环比波动范围的指标监控,如可配置[最小波动值,最大波动值]可接受记录数波动范围。
记录数方差检验
表级别质量监控指标,判断记录数方差检验波动范围的指标监控,如可配置[最小波动值,最大波动值]可接受记录数波动范围。
准确性
数值同比波动监测
对数值类型字段值同比年、季度或月度值是否在波动范围内的指标监控。可配置[最小波动值,最大波动值]可接受记录数波动范围。一般用于报表指标等监控。
数值环比波动监测
对数值类型字段值环比[1-30]天值是否在波动范围内的指标监控。可配置[最小波动值,最大波动值]可接受记录数波动范围。一般用于报表指标等监控。
数值方差波动检验
对数值类型字段值方差检验是否在波动范围内的指标监控。可配置[最小波动值,最大波动值]可接受记录数波动范围。一般用于报表指标等监控。
表逻辑检查
表级别质量监控指标,对表两个字段存在逻辑关系是否准确的监控指标。如信用卡当前剩余可用额度<=此次消费金额;还如贷款,起息日应早于贷款放款日期等异常监控。
一致性
表级别一致性检查
表级别质量监控指标,根据提前定义的数据标准,基础元数据字段命名规范,术语命名规则、字段comennt规范、数据类型规范;指标元数据字段命名规范,术语命名规范、字段comennt规范、数据类型规范,计算口径是否统一等规范。对表结构字段、字段comment、数据类型等的是否一致的监控检查。
交叉验证
表级别质量监控指标,判断两张表的主体对象是否一致。
时效性
数据是否准时产出
表级别质量监控指标,数据是否按时产出。如用于决策的报表是否领导们上班前准时看到准确无误的报表。
数据剖析
最大值检查
对数值类型字段的最大值与期望值可配置[>、>=、=、<=、<、!=]比较的监控指标。支持Where条件的自定义谓词条件限制。
最小值检查
对数值类型字段的最小值与期望值可配置[>、>=、=、<=、<、!=]比较的监控指标。支持Where条件的自定义谓词条件限制。
平均值检查
对数值类型字段的平均值与期望值可配置[>、>=、=、<=、<、!=]比较的监控指标。支持Where条件的自定义谓词条件限制。
汇总值检查
对数值类型字段的汇总值与期望值可配置[>、>=、=、<=、<、!=]比较的监控指标。支持Where条件的自定义谓词条件限制。
自定义规则检查
自定义SQL规则
用户写自定义SQL实现的监控规则,但这段SQL结果必须一行一列值,即监测结果是一个值。可配置[>、>=、=、<=、<、!=]与期望值的比较,判断监测结果是否异常。
表结构变更动态感知
当对某张表或字段配置完监控规则后,表删除或表结构发生了变更,因为程序是对监控规则做组合优化的,不能一个字段的变更到此张表的所有规则失效或报错。在这种情况下,实现了表结构变更的动态感知功能,把涉及到变更了字段的监控规则置为无效,并发出通知。
技术实现是使用Antlr4解析做的,利用Spark词法文件,生成词法分析器,语法分析器,抽象语法树。利用Antlr4访问者模式遍历语法树,收集这段SQL中用到库、表和字段集合与HiveMeta元数据库、表和字段集合比较,如果此表的HiveMeta元数据集合不能包含监控规则关于表元数据集合,将此规则置为无效。
anltr4示例:
词法文件:
语法树:
总结
此数据质量监控系统有丰富可扩展数据质量监控规则库,自定义数据质量监控规则及语法检查,支持任务熔断、电话、短信、邮件多级告警,能清晰定位质量问题业务和技术数据Owner,可监控对象表结构变更动态感知。但是其没有做到与目前使用Airlfow调度无缝集成,需要调度系统做较大改造。
一个数据质量监控系统的自我修养,就是让它不断完善,持续迭代优化,接下来实现支持流式数据质量监控。
由于笔者知识及水平有限,因此文中错漏之处在所难免,恳请各位老师、专家不吝赐教。
参与相关讨论,请在公众号回复关键词:读者群。
参与相关讨论,请在公众号回复关键词:读者群。
技术琐话